Число назовем
массивным, если оно записано в виде a^n, что означает возведение числа a в степень n. Вам требуется сравнить два массивных числа ab и cd,
записанных в формате “<основание>^<экспонента>”.
Из двух заданных
массивных чисел следует вывести большее.
Вход. Два массивных
числа a и b в формате “<основание>^<экспонента>”. Известно, что 1 ≤
<основание>, <экспонента> ≤ 1000.
Выход. Большее число
среди a и b.
Пример входа |
Пример выхода |
3^100
2^150 |
3^100 |
РЕШЕНИЕ
математика
Анализ алгоритма
Прологарифмируем
неравенство ab < cd. Получим b lg a
< d lg c. Значения выражений b lg
a и d lg c помещаются в тип double,
поэтому сравнить их не составит труда.
Реализация алгоритма
Читаем входные
данные, выделяя основания и экспоненты из каждого числа.
scanf("%d^%d %d^%d",&a,&b,&c,&d);
Проведем сравнение прологарифмированных выражений b lg a
и d lg c, после чего выведем ответ.
if (b * log(1.0 * a) < d * log(1.0 * c)) printf("%d^%d\n",c,d);
else printf("%d^%d\n",a,b);
Java реализация
import java.util.*;
public class Main
{
public static void
main(String[] args)
{
Scanner con = new Scanner(System.in);
String s = con.nextLine();
StringTokenizer st = new StringTokenizer(s,"
^");
int a = Integer.valueOf(st.nextToken()),
b = Integer.valueOf(st.nextToken()),
c = Integer.valueOf(st.nextToken()),
d = Integer.valueOf(st.nextToken());
if(b * Math.log(a) > d *
Math.log(c))
System.out.println(a + "^" + b);
else
System.out.println(c + "^" + d);
con.close();
}
}
Java реализация – Scanner, delimiter
import java.util.*;
public class Main
{
public static void
main(String[] args)
{
Scanner con = new Scanner(System.in).useDelimiter("\\s|\\^");
//System.out.println(con.delimiter());
int a = con.nextInt();
int b = con.nextInt();
int c = con.nextInt();
int d = con.nextInt();
if(b * Math.log(a) > d *
Math.log(c))
System.out.println(a + "^" + b);
else
System.out.println(c + "^" + d);
con.close();
}
}